package com.hilin.base.server.feign.api;

import com.hilin.entity.po.AccountInfoPo;
import com.hilin.entity.po.OrgInfoPo;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping()
@FeignClient(value = "hilin-base", path = "/base/api/org")
public interface IOrgApi {

    /**
     * 获取机构信息
     *
     * @param orgId 如果为空，则表示获取token所在机构信息
     * @return 机构列表
     */
    @GetMapping("/gen/detail")
    OrgInfoPo detail(@RequestHeader String token, @RequestParam Long orgId);

    /**
     * 创建机构
     *
     * @param orgInfo 机构信息，其中机构ID由系统生成，orgPid必须在当前token的下属机构中，如果orgPid为空，则表示在token所在机构下创建
     * @return 机构列表
     */
    @PostMapping("/admin/create")
    OrgInfoPo create(@RequestHeader String token, @RequestParam OrgInfoPo orgInfo);

    /**
     * 编辑机构
     *
     * @param orgId   机构id，为空则表示当前token所在机构
     * @param orgName 机构名
     */
    @PostMapping("/admin/edit")
    void edit(@RequestHeader String token, @RequestParam(required = false) Long orgId, @RequestParam String orgName);

    /**
     * 删除机构(软删除)
     *
     * @param orgId 机构ID，不允许删除当前token所在机构，只能删除下属机构
     * @return 机构列表
     */
    @PostMapping("/admin/delete")
    void delete(@RequestHeader String token, @RequestParam Long orgId);

    /**
     * 获取机构用户
     *
     * @param orgId 机构ID，只允许当前token所在机构或下属机构
     * @return 机构列表
     */
    @GetMapping("/admin/orgAccounts")
    List<AccountInfoPo> orgAccounts(@RequestHeader String token, @RequestParam Long orgId);

    /**
     * 获取机构和下属机构用户
     *
     * @param orgId 机构ID，只允许当前token所在机构或下属机构
     * @return 机构列表
     */
    @GetMapping("/admin/orgBranchAccounts")
    List<AccountInfoPo> orgBranchAccounts(@RequestHeader String token, @RequestParam Long orgId);

}
